package main

import (
    "bufio"
    "encoding/json"
    "fmt"
    "net"
    "strings"
)

// 这里定义一个结构体用于演示解析JSON到结构体，你可以根据实际需求替换结构体内容
type Message struct {
    Name    string `json:"name"`
    Content string `json:"content"`
}

func handleConnection(conn net.Conn) {
    defer conn.Close()
    reader := bufio.NewReader(conn)
    buffer := ""
    for {
        // 按字节读取数据，模拟流式接收
        b, err := reader.ReadByte()
        if err!= nil {
            fmt.Println("读取客户端数据出错:", err)
            return
        }
        // 将读取到的字节转换为字符串并添加到缓冲
        buffer += string(b)

        // 查找$分隔符，若找到则处理完整消息
        for {
            index := strings.Index(buffer, "$")
            if index == -1 {
                break
            }
            // 提取完整消息（去掉$分隔符）
            msgData := buffer[:index]
            buffer = buffer[index+1:]

            var msg Message
            err = json.Unmarshal([]byte(msgData), &msg)
            if err!= nil {
                fmt.Println("JSON解码出错:", err)
                continue
            }
            fmt.Printf("收到客户端消息: 姓名: %s, 内容: %s\n", msg.Name, msg.Content)
        }
    }
}

func main() {
    ln, err := net.Listen("tcp", ":8888")
    if err!= nil {
        fmt.Println("监听端口出错:", err)
        return
    }
    defer ln.Close()
    fmt.Println("服务端启动，正在监听8080端口...")
    for {
        conn, err := ln.Accept()
        if err!= nil {
            fmt.Println("接受客户端连接出错:", err)
            continue
        }
        go handleConnection(conn)
    }
}